#include "stdio.h"
#include "string.h"
#include "windows.h"
struct student{
	char name[9];
	char ID[13];
	float ch;
	float math;
	float en;
	float C;
}stu[200];
int i=0;
void manage()
{
	int d,q;
	char k[13];
	printf("信息维护\n");
	printf("1.增加学生信息\n");
	printf("2.删除学生信息\n");
	printf("3.修改学生信息\n输入功能:");
	scanf("%d",&d);
	getchar();
	switch(d)
	{
	case 1:
		char l;
		for(;;)
		{
	    printf("请输入学生姓名:");
	    gets(stu[i].name);
    	printf("学号:");
	    gets(stu[i].ID);
	    printf("语文成绩:");
	    scanf("%f",&stu[i].ch);
	    printf("数学成绩:");
	    scanf("%f",&stu[i].math);
	    printf("英语成绩:");
	    scanf("%f",&stu[i].en);
	    printf("C语言成绩:");
	    scanf("%f",&stu[i].C);
		i++;
		getchar();
		printf("输入任意键继续，输入0结束:");
		l=getchar();
		getchar();
		if(l=='0')
			break;
		}
	    break;
	case 2:
		int h;
		printf("1.按姓名删除:\n");
		printf("2.按学号删除:\n");
		scanf("%d",&h);
		getchar();
		switch(h)
		{
		case 1:
		printf("请输入要删除信息的学生姓名:");
		gets(k);
		printf("删除前的学生信息如下:\n");
		printf("______________________________________________________________________________\n");
    	printf("姓名         学号         语文         数学         英语         C语言        \n");
	    for(q=0;q<i;q++)
		{
		printf("%-13s%-13s%-13.1f%-13.1f%-13.1f%-13.1f\n",stu[q].name,stu[q].ID,stu[q].ch,stu[q].math,stu[q].en,stu[q].C);
		}
		printf("______________________________________________________________________________\n");
		for(q=0;q<i;q++)
		{
			if(strcmp(stu[q].name,k)==0)
			{
				i--;
				strcpy(stu[q].name,stu[i].name);
				strcpy(stu[q].ID,stu[i].ID);
				stu[q].ch=stu[i].ch;
				stu[q].math=stu[i].math;
				stu[q].en=stu[i].en;
				stu[q].C=stu[i].C;
				printf("删除成功\n");
			}
		}
		printf("删除后的学生信息如下:\n");
		printf("______________________________________________________________________________\n");
    	printf("姓名         学号         语文         数学         英语         C语言        \n");
	    for(q=0;q<i;q++)
		{
		printf("%-13s%-13s%-13.1f%-13.1f%-13.1f%-13.1f\n",stu[q].name,stu[q].ID,stu[q].ch,stu[q].math,stu[q].en,stu[q].C);
		}
		break;
		case 2:
		printf("请输入要删除信息的学生学号:");
		gets(k);
		printf("删除前的学生信息如下:\n");
		printf("______________________________________________________________________________\n");
    	printf("姓名         学号         语文         数学         英语         C语言        \n");
	    for(q=0;q<i;q++)
		{
		printf("%-13s%-13s%-13.1f%-13.1f%-13.1f%-13.1f\n",stu[q].name,stu[q].ID,stu[q].ch,stu[q].math,stu[q].en,stu[q].C);
		}
		printf("______________________________________________________________________________\n");
		for(q=0;q<i;q++)
		{
			if(strcmp(stu[q].ID,k)==0)
			{
				i--;
				strcpy(stu[q].name,stu[i].name);
				strcpy(stu[q].ID,stu[i].ID);
				stu[q].ch=stu[i].ch;
				stu[q].math=stu[i].math;
				stu[q].en=stu[i].en;
				stu[q].C=stu[i].C;
				printf("删除成功\n");
			}
		}
		printf("删除后的学生信息如下:\n");
		printf("______________________________________________________________________________\n");
    	printf("姓名         学号         语文         数学         英语         C语言        \n");
	    for(q=0;q<i;q++)
		{
		printf("%-13s%-13s%-13.1f%-13.1f%-13.1f%-13.1f\n",stu[q].name,stu[q].ID,stu[q].ch,stu[q].math,stu[q].en,stu[q].C);
		}
		break;
		}
		break;
	case 3:
		printf("请输入要修改信息学生的学号:");
		gets(k);
		for(q=0;q<i;q++)
		{
			if(strcmp(stu[q].ID,k)==0)
			{
				printf("修改学生姓名:");
	            gets(stu[q].name);
    	        printf("学号:");
	            gets(stu[q].ID);
	            printf("语文成绩:");
	            scanf("%f",&stu[q].ch);
	            printf("数学成绩:");
	            scanf("%f",&stu[q].math);
	            printf("英语成绩:");
	            scanf("%f",&stu[q].en);
	            printf("C语言成绩:");
	            scanf("%f",&stu[q].C);
			}
		}
		break;
	}

}
void search()
{
	int d;char k[20];int q;
	printf("信息查询\n");
	printf("1.按姓名查询\n");
	printf("2.按学号查询\n");
	scanf("%d",&d);
	getchar();
	switch(d)
	{
	case 1:
		printf("请输入姓名:");
		gets(k);
		for(q=0;q<i;q++)
		{
			if(strcmp(k,stu[q].name)==0)
			{
				printf("______________________________________________________________________________\n");
				printf("姓名         学号         语文         数学         英语         C语言        \n");
				printf("%-13s%-13s%-13.1f%-13.1f%-13.1f%-13.1f\n",stu[q].name,stu[q].ID,stu[q].ch,stu[q].math,stu[q].en,stu[q].C);
			}
		}
		break;
	case 2:
		printf("请输入学号:");
		gets(k);
		for(q=0;q<i;q++)
		{
			if(strcmp(k,stu[q].ID)==0)
			{
				printf("______________________________________________________________________________\n");
				printf("姓名         学号         语文         数学         英语         C语言        \n");
				printf("%-13s%-13s%-13.1f%-13.1f%-13.1f%-13.1f\n",stu[q].name,stu[q].ID,stu[q].ch,stu[q].math,stu[q].en,stu[q].C);
			}
		}
		break;
	}
}
void account()
{
	getchar();
	char k[6];
	float a,b;int q;int w=0;
	printf("请输入课程名（语文、数学、英语、C语言）:");
	gets(k);
	printf("请输入分数段:\n");
	printf("多少分以上（大于等于）:");
	scanf("%f",&a);
	printf("多少分以下（小于等于）:");
	scanf("%f",&b);
	if(strcmp(k,"语文")==0)
	{
		printf("此分数段的学生成绩表如下:\n");
		printf("______________________________________________________________________________\n");
		printf("姓名         学号         语文         数学         英语         C语言        \n");		
		for(q=0;q<i;q++)
		{
			if(stu[q].ch>=a&&stu[q].ch<=b)
			{
				printf("%-13s%-13s%-13.1f%-13.1f%-13.1f%-13.1f\n",stu[q].name,stu[q].ID,stu[q].ch,stu[q].math,stu[q].en,stu[q].C);
				w++;
			}
		}
		printf("共%d人\n",w);
	}
	if(strcmp(k,"数学")==0)
	{
		printf("此分数段的学生成绩表如下:\n");
		printf("______________________________________________________________________________\n");
		printf("姓名         学号         语文         数学         英语         C语言        \n");		
		for(q=0;q<i;q++)
		{
			if(stu[q].math>=a&&stu[q].math<=b)
			{
				printf("%-13s%-13s%-13.1f%-13.1f%-13.1f%-13.1f\n",stu[q].name,stu[q].ID,stu[q].ch,stu[q].math,stu[q].en,stu[q].C);
				w++;
			}
		}
		printf("共%d人\n",w);
	}
	if(strcmp(k,"英语")==0)
	{
		printf("此分数段的学生成绩表如下:\n");
		printf("______________________________________________________________________________\n");
		printf("姓名         学号         语文         数学         英语         C语言        \n");		
		for(q=0;q<i;q++)
		{
			if(stu[q].en>=a&&stu[q].en<=b)
			{
				printf("%-13s%-13s%-13.1f%-13.1f%-13.1f%-13.1f\n",stu[q].name,stu[q].ID,stu[q].ch,stu[q].math,stu[q].en,stu[q].C);
				w++;
			}
		}
		printf("共%d人\n",w);
	}
	if(strcmp(k,"C语言")==0)
	{
		printf("此分数段的学生成绩表如下:\n");
		printf("______________________________________________________________________________\n");
		printf("姓名         学号         语文         数学         英语         C语言        \n");		
		for(q=0;q<i;q++)
		{
			if(stu[q].C>=a&&stu[q].C<=b)
			{
				printf("%-13s%-13s%-13.1f%-13.1f%-13.1f%-13.1f\n",stu[q].name,stu[q].ID,stu[q].ch,stu[q].math,stu[q].en,stu[q].C);
				w++;
			}
		}
		printf("共%d人\n",w);
	}
}
void sequence()
{
	int d,w;int p,j;char k[20];float z;int q;
	printf("排序选项\n");
	printf("按课程:1.语文\n");
	printf("       2.数学\n");
    printf("       3.英语\n");
	printf("       4.C语言\n");
	printf("输入:");
	scanf("%d",&d);
	printf("按顺序:1.升序（低分到高分）\n");
	printf("       2.降序（高分到低分）\n");
	printf("输入:");
	scanf("%d",&w);
	switch(d)
	{
	case 1:
		if(w==1)
		{
		    for(p=0;p<i-1;p++)
			    for(j=p+1;j<i;j++)
				{
				    if(stu[p].ch>stu[j].ch)
					{
						strcpy(k,stu[p].name);strcpy(stu[p].name,stu[j].name);strcpy(stu[j].name,k);
						strcpy(k,stu[p].ID);strcpy(stu[p].ID,stu[j].ID);strcpy(stu[j].ID,k);
						z=stu[p].ch;stu[p].ch=stu[j].ch;stu[j].ch=z;
						z=stu[p].math;stu[p].math=stu[j].math;stu[j].math=z;
						z=stu[p].en;stu[p].en=stu[j].en;stu[j].en=z;
						z=stu[p].C;stu[p].C=stu[j].C;stu[j].C=z;
					}
				}
		}
		if(w==2)
		{
		    for(p=0;p<i-1;p++)
			    for(j=p+1;j<i;j++)
				{
				    if(stu[p].ch<stu[j].ch)
					{
						strcpy(k,stu[p].name);strcpy(stu[p].name,stu[j].name);strcpy(stu[j].name,k);
						strcpy(k,stu[p].ID);strcpy(stu[p].ID,stu[j].ID);strcpy(stu[j].ID,k);
						z=stu[p].ch;stu[p].ch=stu[j].ch;stu[j].ch=z;
						z=stu[p].math;stu[p].math=stu[j].math;stu[j].math=z;
						z=stu[p].en;stu[p].en=stu[j].en;stu[j].en=z;
						z=stu[p].C;stu[p].C=stu[j].C;stu[j].C=z;
					}
				}
		}
		break;
	case 2:
		if(w==1)
		{
		    for(p=0;p<i-1;p++)
			    for(j=p+1;j<i;j++)
				{
				    if(stu[p].math>stu[j].math)
					{
						strcpy(k,stu[p].name);strcpy(stu[p].name,stu[j].name);strcpy(stu[j].name,k);
						strcpy(k,stu[p].ID);strcpy(stu[p].ID,stu[j].ID);strcpy(stu[j].ID,k);
						z=stu[p].ch;stu[p].ch=stu[j].ch;stu[j].ch=z;
						z=stu[p].math;stu[p].math=stu[j].math;stu[j].math=z;
						z=stu[p].en;stu[p].en=stu[j].en;stu[j].en=z;
						z=stu[p].C;stu[p].C=stu[j].C;stu[j].C=z;
					}
				}
		}
		if(w==2)
		{
		    for(p=0;p<i-1;p++)
			    for(j=p+1;j<i;j++)
				{
				    if(stu[p].math<stu[j].math)
					{
						strcpy(k,stu[p].name);strcpy(stu[p].name,stu[j].name);strcpy(stu[j].name,k);
						strcpy(k,stu[p].ID);strcpy(stu[p].ID,stu[j].ID);strcpy(stu[j].ID,k);
						z=stu[p].ch;stu[p].ch=stu[j].ch;stu[j].ch=z;
						z=stu[p].math;stu[p].math=stu[j].math;stu[j].math=z;
						z=stu[p].en;stu[p].en=stu[j].en;stu[j].en=z;
						z=stu[p].C;stu[p].C=stu[j].C;stu[j].C=z;
					}
				}
		}
		break;
	case 3:
		if(w==1)
		{
		    for(p=0;p<i-1;p++)
			    for(j=p+1;j<i;j++)
				{
				    if(stu[p].en>stu[j].en)
					{
						strcpy(k,stu[p].name);strcpy(stu[p].name,stu[j].name);strcpy(stu[j].name,k);
						strcpy(k,stu[p].ID);strcpy(stu[p].ID,stu[j].ID);strcpy(stu[j].ID,k);
						z=stu[p].ch;stu[p].ch=stu[j].ch;stu[j].ch=z;
						z=stu[p].math;stu[p].math=stu[j].math;stu[j].math=z;
						z=stu[p].en;stu[p].en=stu[j].en;stu[j].en=z;
						z=stu[p].C;stu[p].C=stu[j].C;stu[j].C=z;
					}
				}
		}
		if(w==2)
		{
		    for(p=0;p<i-1;p++)
			    for(j=p+1;j<i;j++)
				{
				    if(stu[p].en<stu[j].en)
					{
						strcpy(k,stu[p].name);strcpy(stu[p].name,stu[j].name);strcpy(stu[j].name,k);
						strcpy(k,stu[p].ID);strcpy(stu[p].ID,stu[j].ID);strcpy(stu[j].ID,k);
						z=stu[p].ch;stu[p].ch=stu[j].ch;stu[j].ch=z;
						z=stu[p].math;stu[p].math=stu[j].math;stu[j].math=z;
						z=stu[p].en;stu[p].en=stu[j].en;stu[j].en=z;
						z=stu[p].C;stu[p].C=stu[j].C;stu[j].C=z;
					}
				}
		}
		break;
	case 4:
		if(w==1)
		{
		    for(p=0;p<i-1;p++)
			    for(j=p+1;j<i;j++)
				{
				    if(stu[p].C>stu[j].C)
					{
						strcpy(k,stu[p].name);strcpy(stu[p].name,stu[j].name);strcpy(stu[j].name,k);
						strcpy(k,stu[p].ID);strcpy(stu[p].ID,stu[j].ID);strcpy(stu[j].ID,k);
						z=stu[p].ch;stu[p].ch=stu[j].ch;stu[j].ch=z;
						z=stu[p].math;stu[p].math=stu[j].math;stu[j].math=z;
						z=stu[p].en;stu[p].en=stu[j].en;stu[j].en=z;
						z=stu[p].C;stu[p].C=stu[j].C;stu[j].C=z;
					}
				}
		}
		if(w==2)
		{
		    for(p=0;p<i-1;p++)
			    for(j=p+1;j<i;j++)
				{
				    if(stu[p].C<stu[j].C)
					{
						strcpy(k,stu[p].name);strcpy(stu[p].name,stu[j].name);strcpy(stu[j].name,k);
						strcpy(k,stu[p].ID);strcpy(stu[p].ID,stu[j].ID);strcpy(stu[j].ID,k);
						z=stu[p].ch;stu[p].ch=stu[j].ch;stu[j].ch=z;
						z=stu[p].math;stu[p].math=stu[j].math;stu[j].math=z;
						z=stu[p].en;stu[p].en=stu[j].en;stu[j].en=z;
						z=stu[p].C;stu[p].C=stu[j].C;stu[j].C=z;
					}
				}
		}
		break;
	}
	printf("______________________________________________________________________________\n");
	printf("姓名         学号         语文         数学         英语         C语言        \n");
	for(q=0;q<i;q++)
	{
		printf("%-13s%-13s%-13.1f%-13.1f%-13.1f%-13.1f\n",stu[q].name,stu[q].ID,stu[q].ch,stu[q].math,stu[q].en,stu[q].C);
	}
}
void display()
{
	int q;
	printf("______________________________________________________________________________\n");
	printf("姓名         学号         语文         数学         英语         C语言        \n");
	for(q=0;q<i;q++)
	{
		printf("%-13s%-13s%-13.1f%-13.1f%-13.1f%-13.1f\n",stu[q].name,stu[q].ID,stu[q].ch,stu[q].math,stu[q].en,stu[q].C);
	}
}
int main()
{
	int k,d;
	for(;k!=0;)
	{
		printf("______________________________________________________________________________\n");
		printf("功能菜单:\n");
	    printf("1.信息维护（录入，删除，修改）\n");
     	printf("2.信息查询（姓名、学号）\n");
	    printf("3.成绩统计\n");
		printf("4.排序功能\n");
		printf("5.显示学生信息\n");
		printf("0.结束程序\n");
		printf("请输入希望选取的功能：");
		scanf("%d",&d);
		printf("______________________________________________________________________________\n");
	    switch(d)
		{
		case 1:
			FILE *fp;
	        if((fp=fopen("student.dat","wb+"))==NULL)
			{
		        printf("\n无法打开文件\n");
		        exit(0);
			}
			manage();
			break;
	    case 2:
			search();
		    break;
	    case 3:
			account();	
			break;
	    case 4:
			sequence();
		    break;
		case 5:
			display();
			break;
		case 0:k=0;
		    break;
		}
	}
}
